<?php

if (! defined ( 'BASEPATH' ))
	exit ( 'No direct script access allowed' );
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 5.1.6 or newer
 *
 * @package		CodeIgniter
 * @author		ExpressionEngine Dev Team
 * @copyright	Copyright (c) 2008 - 2011, EllisLab, Inc.
 * @license		http://codeigniter.com/user_guide/license.html
 * @link		http://codeigniter.com
 * @since		Version 1.0
 * @filesource
 */

// ------------------------------------------------------------------------


/**
 * CodeIgniter HTML Helpers
 *
 * @package		CodeIgniter
 * @subpackage	Helpers
 * @category	Helpers
 * @author		ExpressionEngine Dev Team
 * @link		http://codeigniter.com/user_guide/helpers/html_helper.html
 */

// ------------------------------------------------------------------------


/**
 * Heading
 *
 * Generates an HTML heading tag.  First param is the data.
 * Second param is the size of the heading tag.
 *
 * @access	public
 * @param	string
 * @param	integer
 * @return	string
 */
if (! function_exists ( 'heading' )) {
	function heading($data = '', $h = '1', $attributes = '') {
		$attributes = ($attributes != '') ? ' ' . $attributes : $attributes;
		return "<h" . $h . $attributes . ">" . $data . "</h" . $h . ">";
	}
}

// ------------------------------------------------------------------------


/**
 * Unordered List
 *
 * Generates an HTML unordered list from an single or multi-dimensional array.
 *
 * @access	public
 * @param	array
 * @param	mixed
 * @return	string
 */
if (! function_exists ( 'ul' )) {
	function ul($list, $attributes = '') {
		return _list ( 'ul', $list, $attributes );
	}
}

// ------------------------------------------------------------------------


/**
 * Ordered List
 *
 * Generates an HTML ordered list from an single or multi-dimensional array.
 *
 * @access	public
 * @param	array
 * @param	mixed
 * @return	string
 */
if (! function_exists ( 'ol' )) {
	function ol($list, $attributes = '') {
		return _list ( 'ol', $list, $attributes );
	}
}

// ------------------------------------------------------------------------


/**
 * Generates the list
 *
 * Generates an HTML ordered list from an single or multi-dimensional array.
 *
 * @access	private
 * @param	string
 * @param	mixed
 * @param	mixed
 * @param	integer
 * @return	string
 */
if (! function_exists ( '_list' )) {
	function _list($type = 'ul', $list, $attributes = '', $depth = 0) {
		// If an array wasn't submitted there's nothing to do...
		if (! is_array ( $list )) {
			return $list;
		}
		
		// Set the indentation based on the depth
		$out = str_repeat ( " ", $depth );
		
		// Were any attributes submitted?  If so generate a string
		if (is_array ( $attributes )) {
			$atts = '';
			foreach ( $attributes as $key => $val ) {
				$atts .= ' ' . $key . '="' . $val . '"';
			}
			$attributes = $atts;
		} elseif (is_string ( $attributes ) and strlen ( $attributes ) > 0) {
			$attributes = ' ' . $attributes;
		}
		
		// Write the opening list tag
		$out .= "<" . $type . $attributes . ">\n";
		
		// Cycle through the list elements.  If an array is
		// encountered we will recursively call _list()
		

		static $_last_list_item = '';
		foreach ( $list as $key => $val ) {
			$_last_list_item = $key;
			
			$out .= str_repeat ( " ", $depth + 2 );
			$out .= "<li>";
			
			if (! is_array ( $val )) {
				$out .= $val;
			} else {
				$out .= $_last_list_item . "\n";
				$out .= _list ( $type, $val, '', $depth + 4 );
				$out .= str_repeat ( " ", $depth + 2 );
			}
			
			$out .= "</li>\n";
		}
		
		// Set the indentation for the closing tag
		$out .= str_repeat ( " ", $depth );
		
		// Write the closing list tag
		$out .= "</" . $type . ">\n";
		
		return $out;
	}
}

// ------------------------------------------------------------------------


/**
 * Generates HTML BR tags based on number supplied
 *
 * @access	public
 * @param	integer
 * @return	string
 */
if (! function_exists ( 'br' )) {
	function br($num = 1) {
		return str_repeat ( "<br />", $num );
	}
}

// ------------------------------------------------------------------------


/**
 * Image
 *
 * Generates an <img /> element
 *
 * @access	public
 * @param	mixed
 * @return	string
 */
if (! function_exists ( 'img' )) {
	function img($src = '', $index_page = FALSE) {
		if (! is_array ( $src )) {
			$src = array ('src' => $src );
		}
		
		// If there is no alt attribute defined, set it to an empty string
		if (! isset ( $src ['alt'] )) {
			$src ['alt'] = '';
		}
		
		$img = '<img';
		
		foreach ( $src as $k => $v ) {
			
			if ($k == 'src' and strpos ( $v, '://' ) === FALSE) {
				$CI = & get_instance ();
				
				if ($index_page === TRUE) {
					$img .= ' src="' . $CI->config->site_url ( $v ) . '"';
				} else {
					$img .= ' src="' . $CI->config->slash_item ( 'base_url' ) . $v . '"';
				}
			} else {
				$img .= " $k=\"$v\"";
			}
		}
		
		$img .= '/>';
		
		return $img;
	}
}

// ------------------------------------------------------------------------


/**
 * Doctype
 *
 * Generates a page document type declaration
 *
 * Valid options are xhtml-11, xhtml-strict, xhtml-trans, xhtml-frame,
 * html4-strict, html4-trans, and html4-frame.  Values are saved in the
 * doctypes config file.
 *
 * @access	public
 * @param	string	type	The doctype to be generated
 * @return	string
 */
if (! function_exists ( 'doctype' )) {
	function doctype($type = 'xhtml1-strict') {
		global $_doctypes;
		
		if (! is_array ( $_doctypes )) {
			if (defined ( 'ENVIRONMENT' ) and is_file ( APPPATH . 'config/' . ENVIRONMENT . '/doctypes.php' )) {
				include (APPPATH . 'config/' . ENVIRONMENT . '/doctypes.php');
			} elseif (is_file ( APPPATH . 'config/doctypes.php' )) {
				include (APPPATH . 'config/doctypes.php');
			}
			
			if (! is_array ( $_doctypes )) {
				return FALSE;
			}
		}
		
		if (isset ( $_doctypes [$type] )) {
			return $_doctypes [$type];
		} else {
			return FALSE;
		}
	}
}

// ------------------------------------------------------------------------


/**
 * Link
 *
 * Generates link to a CSS file
 *
 * @access	public
 * @param	mixed	stylesheet hrefs or an array
 * @param	string	rel
 * @param	string	type
 * @param	string	title
 * @param	string	media
 * @param	boolean	should index_page be added to the css path
 * @return	string
 */
if (! function_exists ( 'link_tag' )) {
	function link_tag($href = '', $rel = 'stylesheet', $type = 'text/css', $title = '', $media = '', $index_page = FALSE) {
		$CI = & get_instance ();
		
		$link = '<link ';
		
		if (is_array ( $href )) {
			foreach ( $href as $k => $v ) {
				if ($k == 'href' and strpos ( $v, '://' ) === FALSE) {
					if ($index_page === TRUE) {
						$link .= 'href="' . $CI->config->site_url ( $v ) . '" ';
					} else {
						$link .= 'href="' . $CI->config->slash_item ( 'base_url' ) . $v . '" ';
					}
				} else {
					$link .= "$k=\"$v\" ";
				}
			}
			
			$link .= "/>";
		} else {
			if (strpos ( $href, '://' ) !== FALSE) {
				$link .= 'href="' . $href . '" ';
			} elseif ($index_page === TRUE) {
				$link .= 'href="' . $CI->config->site_url ( $href ) . '" ';
			} else {
				$link .= 'href="' . $CI->config->slash_item ( 'base_url' ) . $href . '" ';
			}
			
			$link .= 'rel="' . $rel . '" type="' . $type . '" ';
			
			if ($media != '') {
				$link .= 'media="' . $media . '" ';
			}
			
			if ($title != '') {
				$link .= 'title="' . $title . '" ';
			}
			
			$link .= '/>';
		}
		
		return $link;
	}
}

// ------------------------------------------------------------------------


/**
 * Generates meta tags from an array of key/values
 *
 * @access	public
 * @param	array
 * @return	string
 */
if (! function_exists ( 'meta' )) {
	function meta($name = '', $content = '', $type = 'name', $newline = "\n") {
		// Since we allow the data to be passes as a string, a simple array
		// or a multidimensional one, we need to do a little prepping.
		if (! is_array ( $name )) {
			$name = array (array ('name' => $name, 'content' => $content, 'type' => $type, 'newline' => $newline ) );
		} else {
			// Turn single array into multidimensional
			if (isset ( $name ['name'] )) {
				$name = array ($name );
			}
		}
		
		$str = '';
		foreach ( $name as $meta ) {
			$type = (! isset ( $meta ['type'] ) or $meta ['type'] == 'name') ? 'name' : 'http-equiv';
			$name = (! isset ( $meta ['name'] )) ? '' : $meta ['name'];
			$content = (! isset ( $meta ['content'] )) ? '' : $meta ['content'];
			$newline = (! isset ( $meta ['newline'] )) ? "\n" : $meta ['newline'];
			
			$str .= '<meta ' . $type . '="' . $name . '" content="' . $content . '" />' . $newline;
		}
		
		return $str;
	}
}

// ------------------------------------------------------------------------


/**
 * Generates non-breaking space entities based on number supplied
 *
 * @access	public
 * @param	integer
 * @return	string
 */
if (! function_exists ( 'nbs' )) {
	function nbs($num = 1) {
		return str_repeat ( "&nbsp;", $num );
	}
}


/* End of file html_helper.php */
/* Location: ./system/helpers/html_helper.php */